第五章笔记

(1) 引用类型

在 ECMAScript 中,引用类型是一种数据结构。
用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当。尽管 ECMAScript
从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基
本结构。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。

(2) object定义

推荐定义object用字面量定义

var person = {    
 name : "Nicholas",  
 age : 29  
};   
var person = {}; //与 new Object()相同  
person.name = "Nicholas";  
person.age = 29;   

(3)array定义推荐

var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组  
var names = []; // 创建一个空数组 ,用它即可。 
var values = [1,2,]; // 不要这样!这样会创建一个包含 2 或 3 项的数组  
var options = [,,,,,]; // 不要这样!这样会创建一个包含 5 或 6 项的数组 

一些知识点

/*1 动态给数组加数据,类似于线性表了。*/
var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组  
colors[colors.length] = "black"; //(在位置 3)添加一种颜色  
colors[colors.length] = "brown"; //(在位置 4)再添加一种颜色
/*2 数组的toLocaleString()方法,其实是调用每一项的toString方法,输出。*/    
/*数组的栈以及队列方法  
push,pop,shift    
其中push和shift结合可以实现队列方法。*/ 
 var colors=new Array();    
     var count=colors.push("red","green");  //这个函数调用会返回2,有意思  
       alert(count);  
       count=colors.push("black");  
       alert(count);  
       var item=colors.shift();  //取得第一项,厉害了  
       alert(item);

(4) 数组的迭代方法

  • every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。
  • filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
  • forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
  • map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
  • some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。
    以上方法都不会修改数组中的包含的值。
    在这些方法中,最相似的是 every()和 some(),它们都用于查询数组中的项是否满足某个条件。
    对 every()来说,传入的函数必须对每一项都返回 true,这个方法才返回 true;否则,它就返回
    false。而 some()方法则是只要传入的函数对数组中的某一项返回 true,就会返回 true。请看以下
    例子。
var numbers = [1, 2, 4, 343, 43, 423, 4];    
       var everyResult = numbers.every(function (item, index, array) {  
        return (item>2)
       })
   alert(everyResult);  //false,他要求所有item都>2才可以。
   var evetyResultq=numbers.some(function(item,index,array){  
   return  (item>2)
   })
   alert(everyResult);//ture,他只要求其中有一个到几个>2即可。
var filteResult=numbers.filter(function(item,index,array){
       return (item>2);
   })
   alert(filteResult)  //返回这个数组所有大于2的数,并组成一个数组,这个牛逼了

(5) 作为值的函数

/*因为 ECMAScript 中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以  
像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。来看  
一看下面的函数。*/
  function callSomeFunction(someFunction, someArgument) {  
        return someFunction(someArgument);  //函数返回一个值,这个值就是一个函数
    }
    function add10num(num) {
        return num + 10;
    }
    var result = callSomeFunction(add10num, 10);
    alert(result);//20

(6) 作为值的函数以及call

  function callSomeFunction(someFunction, someArgument) {
      return someFunction(someArgument);  //函数返回一个值,这个值就是一个函数
  }
  function add10num(num) {
      return num + 10;
  }
  var result = callSomeFunction(add10num, 10);
  alert(result);//20
window.color = "red";
  var o = { color: "blue" };
  function sayColor() {
      alert(this.color);
  }
  sayColor();
  sayColor.call(this);//red,这是全局变量使用
  sayColor.call(o);//blue,call可以帮我们指定this对象所指向的位置。完美

(7)基本包装类型的生存期以及后台解析成对象

var s1="some text";
var s2=s1.substring(2);
/*后台其实是执行了这样的一个过程

(1) 创建 String 类型的一个实例;
(2) 在实例上调用指定的方法;
(3) 销毁这个实例。
可以将以上三个步骤想象成是执行了下列 ECMAScript 代码。
var s1 = new String("some text");
var s2 = s1.substring(2);
s1 = null;
经过此番处理,基本的字符串值就变得跟对象一样了。而且,上面这三个步骤也分别适用于 Boolean
和 Number 类型对应的布尔值和数字值。
引用类型与基本包装类型的主要区别就是对象的生存期。使用 new 操作符创建的引用类型的实例,
在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一
行代码的执行瞬间,然后立即被销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。如下代码所示
 */

var s1 = "some text";
s1.color = "red";
alert(s1.color); //undefined

(8)单体内置对象Global对象

不属于任何其他对象的属性和方法,最终都是Global对象中的属性和方法。
winow对象,

ECMAScript 虽然没有指出如何直接访问 Global 对象,但 Web 浏览器都是将这个全局对象作为
window 对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了 window
对象的属性。来看下面的例子。

var color = "red";
function sayColor(){
 alert(window.color);
}
window.sayColor(); //"red" 

(9)小结

对象在 JavaScript 中被称为引用类型的值,而且有一些内置的引用类型可以用来创建特定的对象,
现简要总结如下:
1 引用类型与传统面向对象程序设计中的类相似,但实现不同;
2 Object 是一个基础类型,其他所有类型都从 Object 继承了基本的行为;
3 Array 类型是一组值的有序列表,同时还提供了操作和转换这些值的功能;
4  Date 类型提供了有关日期和时间的信息,包括当前日期和时间以及相关的计算功能;
5 RegExp 类型是 ECMAScript 支持正则表达式的一个接口,提供了最基本的和一些高级的正则表
达式功能。
函数实际上是 Function 类型的实例,因此函数也是对象;而这一点正是 JavaScript 最有特色的地
方。由于函数是对象,所以函数也拥有方法,可以用来增强其行为。
因为有了基本包装类型,所以 JavaScript 中的基本类型值可以被当作对象来访问。三种基本包装类
型分别是:Boolean、Number 和 String。以下是它们共同的特征:
6 每个包装类型都映射到同名的基本类型;
7 在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据
操作;
8 操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象。
在所有代码执行之前,作用域中就已经存在两个内置对象:Global 和 Math。在大多数 ECMAScript
实现中都不能直接访问 Global 对象;不过,Web 浏览器实现了承担该角色的 window 对象。全局变
量和函数都是 Global 对象的属性。Math 对象提供了很多属性和方法,用于辅助完成复杂的数学计算
任务。
鲍志强 wechat
欢迎你扫一扫上面的微信公众号,订阅我的博客!
你的点赞是为了你的未来